import UIKit

/**
 B站：https://www.bilibili.com/video/BV144411C7Gg?p=12
 
 第12课内容
 
    set 无序集合
 
    1. 定义
    2. 长度 count
    3. 包含 contains
    4. 添加 insert
    5. 删除 remove
    6. 2个Set合并 union
    7. 2个Set交集 intersection
    8. 2个Set所有不同 symmetricDifference
    9. 2个Set中前面的Set和后面的Set中的 前Set不同 subtracting
    10. Set 比较
    11. Set 因为是无序，不同通过索引(下标) 查找
 
 other
 SwiftGG-翻译组: Swift 中的集合（Set）
 https://swift.gg/2019/07/09/Sets-in-Swift/
 
 */

// 定义
var aa:Set = [1, 2, 3, 4, 5] // 等于 aa:Set<Int> = [1, 2, 3, 4, 5]
var bb:Set<String> = ["hello", "world"]
let cc:Set<Double> = []


var set_list:Set = ["hello", "world", "Swift", "Vue"]
// 长度
print(set_list.count)

// 添加 (因为无序，添加的位置不定)
set_list.insert("srx")
print(set_list)

// 包含
print(set_list.contains("srx"))

// 使用打印 不是我们要的，是不是因为无序的原因？？？？？？
//set_list.index(Set<String>.Index, offsetBy: Int)
//print(set_list.index(set_list.startIndex, offsetBy: 1))

// 删除 某个索引，其实也不知道删的是啥，这个应该用的少
//set_list.remove(at: Set<String>.Index)
//set_list.remove(at: set_list.startIndex)
//print(set_list)

//set_list.remove(T##member: String##String)
set_list.remove("srx")
print(set_list)

print("\n---- union 合并 ---")
// 2个 Set 集合合并, (相同的数据保留一个)
let data:Set = ["iPhone", "Android", "hello", "Vue"]
let new_set1 = set_list.union(data)
print(set_list, "----",data)
print(new_set1)


print("\n---- intersection 交集 ---")
// 2个 Set 集合的 交集, 相同的数据
let new_set2 = set_list.intersection(data)
print(set_list, "----",data)
print(new_set2)

print("\n---- symmetricDifference 不同 ---")
// 2个 Set 集合中，不同的数据
let new_set3 = set_list.symmetricDifference(data)
print(set_list, "----",data)
print(new_set3)


print("\n---- subtracting 比较后set_list的不同 ---")
// 2个 Set 集合，set_list 和 data 比较后   set_list中不同(前和后，前中的不同)
let new_set4 = set_list.subtracting(data)
print(set_list, "----", data)
print(new_set4)


print("\n----  比较2个set集合是否相等 ---")
let a:Set = [1, 2]
let b:Set = [2, 1]
// 因为 Set是无序的，so 相等
if (a == b) { print("set 相等") }
else { print("set 不相等") }

print("\n----  过滤 filter---")
let result = set_list.filter { (item) -> Bool in
    if (item == "hello") {
        return false
    }
    return true
}
print(result)
